package com.innotek.testworkstation.util;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName FileUtil
 * @Description TODO
 * @Author wangx
 * @Date 2021/7/9 上午9:42
 * @Version 1.0
 **/

@Slf4j
public class FileUtil {

    /**
     * 获取文件夹下所有文件的绝对路径的方法，递归，排除了Linux和mac系统的隐藏文件
     *
     * @param path 遍历的目录
     * @return 文件路径list
     */
    public static List<String> getAllFile(String path) {
        List<String> list = new ArrayList<>();
        File file = new File(path);
        if (!file.exists() || file.isFile()) { return list; }
        File[] files = file.listFiles();
        if(files == null){ return list; }
        int length = files.length;
        if (length == 0) { return list; }
        for (File file1 : files) {
            if (file1.isDirectory()) {
                List<String> allFile = getAllFile(file1.getAbsolutePath());
                list.addAll(allFile);
                continue;
            }
            String path1 = file1.getAbsolutePath();
            if (path1.contains("/.")) {
                // 过滤路径中带/.的，一般为隐藏文件
                continue;
            }
            list.add(path1);
        }
        return list;
    }


    /**
     * 重命名一个文件
     * @param oldPath 未重命名前文件的路径
     * @param newPath 重命名后文件要保存的路径
     */
    public static void rename(String oldPath, String newPath) {
        if (new File(oldPath).renameTo(new File(newPath))) {
            log.error(String.format("rename file error!，old:%s,new:%s", oldPath, newPath));
        }
    }

    /**
     * 拷贝文件
     * @param source
     * @param target
     * @return
     */
    public static void copy(String source, String target) {
        File s = new File(source);
        File t = new File(target);
        if (s.exists() && s.isFile()) {
            try {
                Files.copy(s.toPath(),t.toPath());
            } catch (IOException e) {
                log.error(e.getMessage());
            }
        }
    }

    /**
     * 创建文件
     * @param filePath
     */
    public static void createFile(String filePath){
        File file = new File(filePath);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
